// Biblotecas estandar
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "./API/API.h"


int procesarArgumentos(int argc, char *argv[], int *cantPuertas, long *idPersona);
void reportarMuseoCerrado(long idPersona);
		
	
int main(int argc, char* argv[]) {
	long idPersona;
	int cantPuertas;

	if (procesarArgumentos(argc, argv, &cantPuertas, &idPersona)) {
		exit(1);
	}

	// Inicializo la semilla del generador aleatorio de números y instancio 
	// a la API
	srand(getpid());	
	API api = API();	

	if (api.entrarAMuseo(idPersona, (rand() % cantPuertas) + 1) == false) {
		// Cerraron el museo
		reportarMuseoCerrado(idPersona);
		return 0;
	}
	
	// Simular el paseo en el zoológico (entre 0.5 y 5.5 segundos)
	usleep(1000 * (rand() % 5000) + 500);
	
	
	
	if (api.salirDeMuseo(idPersona, (rand() % cantPuertas) + 1) == false) {
		reportarMuseoCerrado(idPersona);
		return 0;
	}
}


int procesarArgumentos(int argc, char * argv[], int *cantPuertas, long *idPersona) {
	char buffer[100];

	if (argc != 3)
	{
		sprintf(buffer, "Persona - Error: Cantidad de argumentos pasados al programa incorrectos\n");
		write(fileno(stdout), buffer, strlen(buffer));
		return 1;
	}
	
	sscanf(argv[1], "%d", cantPuertas); 
	if (*cantPuertas < 1)
	{
		sprintf(buffer, "Persona - Error: La cantidad de puertas debe ser un número mayor o igual a 1\n");
		write(fileno(stdout), buffer, strlen(buffer));
		return 2;
	}
	
	sscanf(argv[2], "%ld", idPersona);
	return 0;
}

void reportarMuseoCerrado(long idPersona)
{
	char buffer[100];
	sprintf(buffer, "Persona N°%ld: Museo cerrado. Saliendo.\n", idPersona);
	write(fileno(stdout), buffer, strlen(buffer));
}
